1e32e0e5cfefe361a4f226d7c74280ae53a8f5e5,src/com/redhat/ceylon/compiler/codegen/ExpressionTransformer.java,ExpressionTransformer,transformAssignment,#Node#Term#JCExpression#JCExpression#,243

Before Change


            if (Decl.withinMethod(decl)) {
                result = at(op).Apply(List.<JCTree.JCExpression>nil(),
                        makeIdentOrSelect(expr, decl.getName() + "$setter", Util.getSetterName(decl.getName())),
                        List.<JCTree.JCExpression>of(rhs));
            } else {
                result = at(op).Apply(List.<JCTree.JCExpression>nil(),
                        makeIdentOrSelect(expr, Util.getSetterName(decl.getName())),
                        List.<JCTree.JCExpression>of(rhs));            
            }
        } else if (variable && (Decl.isClassAttribute(decl))) {
            // must use the setter
            result = at(op).Apply(List.<JCTree.JCExpression>nil(),
                    makeIdentOrSelect(expr, Util.getSetterName(decl.getName())), 
                    List.<JCTree.JCExpression>of(rhs));
        } else if (variable && (decl.isCaptured() || decl.isShared())) {
            // must use the qualified setter
            result = at(op).Apply(List.<JCTree.JCExpression>nil(),

After Change


        return transformAssignment(op, leftTerm, expr, rhs);
    }
    
    JCExpression transformAssignment(Node op, Term leftTerm, JCExpression expr, JCExpression rhs) {
        JCExpression result = null;

        // FIXME: can this be anything else than a Primary?
        TypedDeclaration decl = (TypedDeclaration) ((Tree.Primary)leftTerm).getDeclaration();

        boolean variable = decl.isVariable();
        
        at(op);
        if (decl.isToplevel()) {
            // must use top level setter
            result = makeSetter(rhs, makeFQIdent(decl.getContainer().getQualifiedNameString()), Util.quoteIfJavaKeyword(decl.getName()), Util.getSetterName(decl.getName()));
        } else if ((decl instanceof Getter)) {
            // must use the setter
            if (Decl.withinMethod(decl)) {
                result = makeSetter(rhs, makeIdentOrSelect(expr, decl.getName() + "$setter", Util.getSetterName(decl.getName())));
            } else {
                result = makeSetter(rhs, makeIdentOrSelect(expr, Util.getSetterName(decl.getName())));            
            }
        } else if (variable && (Decl.isClassAttribute(decl))) {
            // must use the setter
            result = makeSetter(rhs, makeIdentOrSelect(expr, Util.getSetterName(decl.getName())));
        } else if (variable && (decl.isCaptured() || decl.isShared())) {
            // must use the qualified setter
            result = makeSetter(rhs, makeIdentOrSelect(expr, decl.getName(), Util.getSetterName(decl.getName())));